<?php

abstract class Sc_Domain
{
    /**
     * プロパティンの値を取得します。
     * @param strnig $name プロパティの名称を指定します。
     * @return
     */
    public function __get($name)
    {
        $ret = null;
        $exists = property_exists($this, $name);
        if ($exists == TRUE) {
            $ret = $this->$name;
        }

        return $ret;
    }

    public function __set($name, $value)
    {
        $exists = property_exists($this, $name);
        if ($exists == TRUE) {
            $this->$name = $value;
        }
    }

    /**
     * オブジェクトの内容を格納した配列を取得します。
     *
     * @return array オブジェクトの内容を格納した配列を返します。
     */
    public function toArray()
    {
        return array();
    }

    /**
     * フラグデータを取得します。
     *
     * @param array|Zend_Db_Table_Row_Abstract $data 初期化用データを指定します。
     * @param mixed $index                           データのインデックスを指定します。
     * @param boolean $default                       初期値を指定します。
     * @return boolean                               フラグデータを返します。
     */
    protected function getFlag($data, $index, $default = TRUE)
    {
        $ret = $default;
        if (isset($data[$index]) == TRUE) {
            $ret = $data[$index] == 0 ? FALSE : TRUE;
        }

        return $ret;
    }

    /**
     * データを取得します。
     *
     * @param array|Zend_Db_Table_Row_Abstract $data 初期化用データを指定します。
     * @param mixed $index                           データのインデックスを指定します。
     * @param mixed $default                         初期値を指定します。
     * @return mixed                                 データを返します。
     */
    protected function getData($data, $index, $default = null)
    {
        $ret = $default;
        if (isset($data[$index]) == TRUE) {
            $ret = $data[$index];
        }

        return $ret;
    }

    /**
     * 日時データを取得します。
     * @param array|Zend_Db_Table_Row_Abstract $data 初期化用データを指定します。
     * @param mixed $index データのインデックスを指定します。
     * @param Zend_Date $default 初期値を指定します。
     * @return Zend_Date 取得した日時データを返します。
     */
    protected function getDateTime($data, $index, $default = null)
    {
        $ret = $default;
        if (isset($data[$index]) == TRUE) {
            $value = $data[$index];
            if ($value != null && $value != '0000-00-00 00:00:00') {
                $ret = new Zend_Date($value, Zend_Date::ISO_8601);
            } else {
                $ret = null;
            }
        }

        return $ret;
    }

    /**
     * 指定された日時をZend_Dateクラスのインスタンスに変換します。
     * @param mixed|string|Zend_Date $value 日時を指定します。
     * @return Zend_Date 変換後の日時を返します。
     */
    protected function toDate($value)
    {
        if ($value instanceof Zend_Date) {
            return $value;
        } else {
            return new Zend_Date($value, Zend_Date::ISO_8601);
        }
    }

    /**
     * Boolean値をDB格納用の値に変換します。
     * @param boolean $value 値を指定します。
     * @return mixed         DB格納用の値を返します。
     */
    protected function getDbBoolean($value)
    {
        return $value == TRUE ? 1 : 0;
    }
}